package org.subethamail.core.util;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import javax.activation.DataContentHandler;
import javax.activation.DataSource;
import lombok.extern.java.Log;
/**
* This content handler stores an attachment id as ascii text.
* In the future this could get a lot more sophisticated, returning
* the java.sql.Blob of the attachment, but for now this works.
* In particular, it allows us to use application/subetha-detachment
* as a legit mime-type.
*
* The data in and out is java.lang.Long
*
* @author Jeff Schnitzer
*/
@Log
public class DetachmentContentHandler implements DataContentHandler
{
/*
* (non-Javadoc)
* @see javax.activation.DataContentHandler#getContent(javax.activation.DataSource)
*/
public Object getContent(DataSource ds) throws IOException
{
// Extract the String id
InputStreamReader reader = new InputStreamReader(ds.getInputStream(), "ASCII");
StringBuilder builder = new StringBuilder();
int ch;
while ((ch = reader.read()) >= 0)
builder.append((char)ch);
// Return it as a Long
return Long.valueOf(builder.toString());
}
/*
* (non-Javadoc)
* @see javax.activation.DataContentHandler#getTransferData(java.awt.datatransfer.DataFlavor, javax.activation.DataSource)
*/
public Object getTransferData(DataFlavor df, DataSource ds) throws UnsupportedFlavorException, IOException
{
throw new UnsupportedOperationException();
}
/*
* (non-Javadoc)
* @see javax.activation.DataContentHandler#getTransferDataFlavors()
*/
public DataFlavor[] getTransferDataFlavors()
{
throw new UnsupportedOperationException();
}
/*
* (non-Javadoc)
* @see javax.activation.DataContentHandler#writeTo(java.lang.Object, java.lang.String, java.io.OutputStream)
*/
public void writeTo(Object obj, String mimeType, OutputStream os) throws IOException
{
byte[] data = obj.toString().getBytes("ASCII");
os.write(data);
}
}